package com.github.jspxnet.worktask.dao;

import com.github.jspxnet.json.JSONObject;
import com.github.jspxnet.sober.SoberSupport;
import com.github.jspxnet.worktask.table.WorkTask;
import com.github.jspxnet.worktask.table.WorkTaskVariable;

import java.util.List;
import java.util.Map;

public interface RuntimeServiceDAO  extends SoberSupport {
    /**
     *
     * @param flowNo 流程编号
     * @param namespace 命名空间
     * @param documentNo 文档号
     * @return  返回当前没有完成的当前任务id列表,如果有分子这里就会出现多个,形成列表
     */
    List<WorkTask> getWorkTaskList(String flowNo, String namespace, String documentNo);


    /**
     * @param flowNo    流程编号
     * @param namespace 命名空间
     * @return 得到流程的所有当前需要执行的节点
     */
    //List<WorkTask> getWorkTaskList(String flowNo, String namespace);

    List<WorkTask> getWorkTaskList(String flowNo, String namespace);

    /**
     *
     * @param flowNo 流程编号
     * @param namespace 命名空间
     * @param currentPage 页数
     * @param count 总数
     * @return 得到流程的所有当前需要执行的节点
     */
    List<String> getDocumentList(String flowNo, String namespace, int currentPage, int count);
    /**
     * @param flowNo     流程
     * @param namespace  命名空间
     * @param documentNo 文档
     * @param nodeId     节点
     * @return 得到完整的当前任务
     */
    WorkTask getWorkTask(String flowNo, String namespace, String documentNo, String nodeId);

    boolean canStart(String flowNo, String namespace, String documentNo);


    int isFlowFinished(Map<String, Object> valueMap);

    /**
     * @param flowNo     流程编号
     * @param namespace  命名空间
     * @param documentNo 文档id
     * @return 删除所有流程节点
     */
    int deleteWorkTask(String flowNo, String namespace, String documentNo);
    /**
     *
     * @param flowNo  流程编号
     * @param namespace   命名空间
     * @param documentNo  文档id
     * @param userId  用户ID
     * @return  删除所有流程节点
     */
    int isAudited(String flowNo, String namespace, String documentNo, String userId);

    /**
     *
     * @param flowNo  流程编号
     * @param namespace 命名空间
     * @param documentNo  文档id
     * @param joinNodeId  有join节点的节点
     * @return 返回已经执行了的join节点
     */
    List<WorkTask> getJoinExeNodeList(String flowNo, String namespace, String documentNo, List<String> joinNodeId);


    /**
     * 更新分支节点合并成功
     * @param flowNo  流程编号
     * @param namespace  命名空间
     * @param nodeId  文档id
     * @param documentNo 文档ID
     * @return 更新状态
     * @throws Exception  异常
     */
    int updateJoinFinished(String flowNo, String namespace, String nodeId, String documentNo) throws Exception;

    /**
     * @param varNo 变量编号
     * @return 返回变量配置
     */
    WorkTaskVariable getWorkTaskVariable(String varNo);

    /**
     *
     * @param varNo 变量编号
     * @param json  变量
     * @return 是否保存成功
     */
    int putWorkTaskVariable(String varNo, JSONObject json);
}
